var assert = require('assert');
require('../src/main')

describe('添加数字类型方法', function () {
  describe('原始需求测试', function () {
    it('(5).add(3).minus(2) 等于 6', function () {
      assert.equal((5).add(3).minus(2), 6);
    });
  });
  describe('check 方法测试', function () {
    it('方法存在', function () {
      assert.equal(typeof (1).check, 'function');
    });
    it('不能是 NaN', function () {
      assert.equal((9384302).check(), true);
      assert.equal((Number('sdfasd')).check(), false);
    });
    it('必须是整数', function () {
      assert.equal((9384302).check(), true);
      assert.equal((2312312312.3).check(), false);
      assert.equal((-9384302).check(), true);
      assert.equal((-31253.7).check(), false);
    });
    it('不能太大,不能太小', function () {
      assert.equal((1).check(), true);
      assert.equal((999).check(), true);
      assert.equal((1999999999).check(), true);
      assert.equal((9007199254740991).check(), true);
      assert.equal((9007199254740992).check(), false);
      assert.equal((-1999999999).check(), true);
      assert.equal((-9007199254740991).check(), true);    
      assert.equal((-9007199254740992).check(), false);    
    });
  });
  describe('add 方法测试', function () {
    it('正常加法', function () {
      assert.equal((5).add(3), 8);
      assert.equal((555).add(333), 888);
      assert.equal((15).add(13), 28);
      assert.equal((-5).add(3), -2);
      assert.equal((555).add(-333), 222);
      assert.equal((-15).add(-13), -28);
    });

    it('无参数返回原值', function () {
      assert.equal((5).add(), 5);
    });
    it('非数字要出错', function () {
      assert.equal((5).add('dfjkl'), '请输入不太大不太小的整数');
    });
    it('参数过大或过小要出错', function () {
      assert.equal((5).add(9007199254740992), '请输入不太大不太小的整数');
      assert.equal((5).add(-9007199254740992), '请输入不太大不太小的整数');
    });
    it('结果过大或过小要出错', function () {
      assert.equal((5).add(9007199254740990), '请输入不太大不太小的整数');
      assert.equal((-5).add(-9007199254740990), '请输入不太大不太小的整数');
    });
  });
});